package pt.processingQueues.simulation; import pt.processingQueues.principal.*; public class Simulation { private int simulationTime=2000; private int queuesNumber=3; private int minS=1,maxS=3,minA=1,maxA=3; protected ClientGenerator clientGenerator; protected Scheduler scheduler; protected SupermarketCheckout[] queues=new SupermarketCheckout[30]; protected Thread[] threads=new Thread[30]; protected Thread schedulerThread; protected Thread generatorThread; protected PeakHour peakHour; protected Thread peakHourThread; public Simulation(int minS,int maxS,int minA,int maxA,int queuesNr,int simTime){ this.minS=minS;this.maxS=maxS; this.minA=minA;this.maxA=maxA; this.queuesNumber=queuesNr;this.simulationTime=simTime; } public void initSimulation(){ scheduler=new Scheduler(); schedulerThread=new Thread(scheduler); for (int i=0;i<queuesNumber;i++) { queues[i]=new SupermarketCheckout(i+1); threads[i]=new Thread(queues[i]); threads[i].start(); scheduler.addSupermarketCheckout(queues[i]); } clientGenerator=new ClientGenerator(maxA,minA,maxS,minS,scheduler); peakHour = new PeakHour(clientGenerator); generatorThread = new Thread(clientGenerator); peakHourThread = new Thread(peakHour); schedulerThread.start(); generatorThread.start(); peakHourThread.start(); } /**pause all threads*/ public void pause() { System.out.println("Simulation is in pause!"); for (int i =0; i < queuesNumber; i++) { queues[i].setRunning(false);} clientGenerator.setRunning(false); scheduler.setRunning(false); peakHour.setRun(false); } public void pauseGenerator() { clientGenerator.setRunning(false); } /** starts all threads*/ public void start() { for (int i = 0; i < queuesNumber; i++) { queues[i].setRunning(true); } clientGenerator.setRunning(true); scheduler.setRunning(true); peakHour.setRun(true); } /** stops threads*/ public void stop() { for (int i = 0; i < queuesNumber; i++) { threads[i].stop(); } generatorThread.stop(); schedulerThread.stop(); peakHourThread.stop(); } /**get peak hour*/ public String getPeakHour() { return peakHour.getPeackHour(); } /**how many clients per checkout were served*/ public double getAvgAllProcersorsActiveTime() { double total = 0; for (int i = 0; i < queuesNumber; i++) { total=total+queues[i].getClientsServed(); } return total / queuesNumber; } /**average service time for all queues*/ public double getAvgServiceTime() { double total = 0; for (int i = 0; i < queuesNumber; i++) { total=total+queues[i].avgServiceTime(); } return total / queuesNumber; } /**average service time for all queues*/ public double getAvgWaitingTime() { double total = 0; for (int i = 0; i < queuesNumber; i++) { total=total+queues[i].avgWaitingTime(); } return total / queuesNumber; } }